package com.sz.common.core.system.service;

import com.sz.common.core.system.dto.MenuItem;
import com.sz.common.core.system.entity.Menu;

import java.util.List;

/**
 * Function: 菜单service <br>
 * Author: hpeng.wang <br>
 * Date: 2016-10-31 13:41:00
 */
public interface MenuService {

    int save(Menu menu);

    Menu findById(Integer id);

    int delete(Integer id);

    int update(Menu menu);

    /**
     * 获取完整菜单树
     *
     * @param domainId      --域Id
     * @param localLanguage --本地化语言代码
     * @param showAll       --是否显示所有(包含隐藏菜单)
     * @return
     */
    MenuItem getMenuTree(int domainId, String localLanguage, boolean showAll, Boolean isTree);

    /**
     * 获取指定角色id下的菜单树
     *
     * @param roleId 角色id
     * @return 获取的菜单树
     */
    MenuItem getRoleMenuTree(int roleId);

    /**
     * 获取当前登录用户的菜单树.
     *
     * @return 返回菜单对象
     */
    MenuItem getCurrUserMenu();


    /**
     * 根据资源id集合查询相应的菜单.
     *
     * @param resIdList 菜单id集合
     * @param isHidden  false 表示显示，true表示隐藏 如果为NULL，代表不需要传这个参数
     * @return 查询的菜单集合
     */
    List<Menu> findByIds(List<Integer> resIdList, Boolean isHidden);

    /**
     * 根据父id集合查询相应的菜单集.
     *
     * @param parentIds 父id集合
     * @return 查询的菜单集合
     */
    List<Menu> findByParentIds(List<Integer> parentIds);

    /**
     * 根据菜单树和domian查询菜单树所有的相应权限
     *
     * @param menuItem
     * @param domainId
     * @return
     */
    MenuItem getMenuPermissionByMenuItemAndDomainId(MenuItem menuItem, int domainId);

    /**
     * 根据角色查询MenuItem
     *
     * @param roleId
     * @return
     */
    MenuItem getRoleMenuAndPermissionTree(int roleId);

}
